package com.example.located_server.util;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/**
 * @description:
 * @author: zc
 * @createDate: 2021/8/18
 * @version: 1.0
 * @remark：图片上传工具类
 */
public class FileUpload {
    //    @Value("${file-write-path}")
    //    private static String fileWritePath =realPath+ "/img";
    private static final Logger logger = LoggerFactory.getLogger(FileUpload.class);
    private static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");

    public static String upload(MultipartFile[] files) {
        //获取当前项目的真实路径，然后拼接前面的文件名
        String fileWritePath = System.getProperty("user.dir") + "\\src\\main\\resources\\";

        String[] visitPathArr = new String[files.length];
        String writePath = null;
        String visitPath = null;
        // files是一个或者多个文件对象
        for (int i = 0; i < files.length; i++) {
            MultipartFile file = files[i];
            // 获取上传的文件名, 用来获取后缀名
            String originalFilename = file.getOriginalFilename();
            //截取文件名去掉后缀
            String fileName = originalFilename.substring(0, originalFilename.lastIndexOf("."));
            // 文件输入流  实际就是文件内容
            try {
                InputStream inputStream = file.getInputStream();
                // 生成随机文件名
                String uuid = UUID.randomUUID().toString().replace("-", "");
                // 写入硬盘的名字
                String writeFileName = uuid + "." + FilenameUtils.getExtension(originalFilename);
                // 获取当前的年月日
                String yyyyMMdd = sdf.format(new Date());
                // 这是访问路径 用nginx的ip:端口/访问路径 就可以访问到文件
                visitPath ="\\"+"img"+"\\"+ yyyyMMdd +"\\" + fileName + "_"+ writeFileName;
                // 准入写入硬盘的全路径 return writePath
                writePath = fileWritePath + visitPath;
//                req.getSession().setAttribute("uploadPath",writePath);

                File writeFile = new File(writePath);
                if (!writeFile.getParentFile().exists()) {
                    // 如果父目录不存在则创建父目录
                    writeFile.getParentFile().mkdirs();
                }
                FileOutputStream fos = new FileOutputStream(writeFile);
                // 将上传的流写入到 硬盘
                IOUtils.copy(inputStream, fos);
                IOUtils.close(inputStream);
                IOUtils.close(fos);
                // 将访问路径放入 访问路径数组, 前端就用这个数组来获取一个一个的访问地址然后展示图片
                visitPathArr[i] = visitPath;
                System.out.println(visitPath);
            } catch (IOException e) {
//                e.printStackTrace();
                logger.error("文件上传出错", e);
//                return CommonResult.failed("文件上传出错");
                return "文件上传出错";
            }
        }
        // 将访问路径数组返回给前端
        return visitPath;
    }

    /*测试路径*/
    public static void main(String[] args) {
        String fileWritePath = System.getProperty("user.dir") + "\\src\\main\\resources\\img\\";
        System.out.println(fileWritePath);
    }

}
